<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.js"></script>

<body>
    <div id="app">
        <h1 v-show="flag">{{msg}}</h1>
        <button @click="flag=!flag">切换</button>
        <button @click="del">销毁</button>
        <h1 ref="dongdidi">张栋弟弟好可爱啊！！！！</h1>
    </div>
    <script>
        // beforeCreate  created beforeMount mounted beforeUpdate updated beforeDestroy destroyed
        const vm = new Vue({ //配置对象中有很多选项  el data(数据) 计算属性 方法 事件 函数
            el: '#app',
            data: {
                msg: "天庆中午吃了什么饭？",
                flag: true
            },
            methods: {
                del() {
                    // this指向实例对象
                    this.$destroy();
                }
            },
            // 在vue实例创建前 根元素 数据 函数 方法 事件没有初始化完成 不能操作DOM
            beforeCreate() {
                console.log('beforeCreate');
                console.log(this.msg);
                console.log(this.del);
                console.log(this.$el); //$el获取vue实例根元素
                console.log(this.$refs.dongdidi);

            },
            // 在vue实例创建后，数据 函数 方法 事件 （计算属性 侦听）配置完成   根元素没有初始化 不能DOM元素
            // 可以完成前后端交互，发起异步请求
            created() {
                console.log('created');
                console.log(this.msg);
                console.log(this.del);
                console.log(this.$el); //$el获取vue实例根元素
                console.log(this.$refs.dongdidi);

            },
            // vue组件挂载前 新建的vm.$el创建完成，但是没有挂载 ，不能直接操作DOM
            beforeMount() {
                console.log('beforeMount');
                console.log(this.msg);
                console.log(this.del);
                console.log(this.$el); //$el获取vue实例根元素
                console.log(this.$refs.dongdidi);
            },
            // vue组件挂载之后 el被新创建的vm.$el替换可以操作DOM
            // 可以完成一些异步操作 ajax 定时器
            // 当前页面不销毁，挂载只执行一次
            mounted() {
                console.log('mounted');
                console.log(this.$el); //$el获取vue实例根元素
                console.log(this.$refs.dongdidi);
            },
            // 数据改变触发 
            beforeUpdate() {
                console.log("beforeUpdate");
            },
            // 重新渲染虚拟DOM,diff算法更新真实DOM
            updated() {
                console.log("updated");
            },
            // 组件实例销毁之前   这时候实例数据 方法 事件 函数仍然能用
            // 收尾工作  例如清除定时器  移除一些绑定的事件
            beforeDestroy() {
                console.log('beforeDestroy');
                console.log(this.msg);
                console.log(this.del);
                console.log(this.$el); //$el获取vue实例根元素
                console.log(this.$refs.dongdidi);
            },
            // 销毁   不能操作DOM
            destroyed() {
                console.log('destroyed');
                console.log(this.msg);
                console.log(this.del);
                console.log(this.$el); //$el获取vue实例根元素
                console.log(this.$refs.dongdidi);
            },
        })
    </script>
</body>

</html>